home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 November / Chip_2000-11_cd2.bin / sharewar / Slunec / app / 17 / _SETUP.1 / Nainstalovat novy modul.pw < prev    next >
Text File  |  2000-08-30  |  5KB  |  145 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {     Programmer's Wizard 2 Pascal Script               }
  5. {     (popis jazyka v souboru SCRIPT.DOC)               }
  6. {                                                       }
  7. {*******************************************************}
  8. uses ScriptUtils;
  9.  
  10. function GetVerStr: string;
  11. var
  12.   mMajor, mMinor, mRel: Integer;
  13. Begin
  14.   GetVersionEx(mMajor, mMinor, mRel);
  15.   result := 'v' + IntToStr(mMajor) + '.' + IntToStr(mMinor) + '.' +
  16.     IntToStr(mRel);
  17. end;
  18.  
  19. function GetValidVerStr: string;
  20. Begin
  21.   result := 'v2.0.1'; //pozadovana verze PW
  22. end;
  23.  
  24. procedure EnsureSafeScriptingDisabled;
  25. Begin
  26.   while IsSafeScriptingEnabled do Begin
  27.     //zobrazit upozorneni..
  28.     if not (AskUser('Tento skript vyu₧φvß n∞kterΘ chrßn∞nΘ funkce a proto ' +
  29.       'nem∙₧e pracovat p°i zapnutΘm bezpeΦnΘm skriptovßnφ. Chcete tento ' +
  30.       're₧im skriptovßnφ vypnout?')) then Halt;
  31.  
  32.     //..a dialog, ve kterem lze skriptovani vypnout
  33.     Menu_FileSettingsScripting;
  34.   end;
  35. end;
  36.  
  37. function ParseAndDisplayCheckListDialog(var AModuleList: Array;
  38.   var ACheckBoxes: Array): Boolean;
  39. var
  40.   mList: Array of String;
  41.   mIndex: LongInt;
  42. Begin
  43.   SetArrayLength(mList, GetArrayLength(AModuleList));
  44.   //odstranime cestu k modulu, nechame jen nazev
  45.   for mIndex := 0 to GetArrayLength(AModuleList) - 1 do
  46.     mList[mIndex] := ExtractFileName(AModuleList[mIndex]);
  47.  
  48.   //zobrazit dialog se seznamem modulu, vcetne zaskrtavacich tlacitek
  49.   result := ShowCheckListDialog(
  50.     'Nainstalovat zßsuvnΘ moduly',
  51.     'Vyberte moduly, kterΘ chcete nainstalovat:',
  52.     mList,
  53.     ACheckBoxes
  54.   ) <> -1;
  55. end;
  56.  
  57. function SumBooleanArray(var ABooleanArray: Array): LongInt;
  58. var mIndex: LongInt;
  59. Begin
  60.   result := 0;
  61.   for mIndex := 0 to GetArrayLength(ABooleanArray) - 1 do
  62.     if ABooleanArray[mIndex] then inc(result);
  63. end;
  64.  
  65. function InstallPlugins(var AModuleList: Array; var AMask: Array): LongInt;
  66. var mIndex: Integer;
  67.     mSrc, mDest: String;
  68. Begin
  69.   result := 0;
  70.   for mIndex := 0 to GetArrayLength(AModuleList) - 1 do
  71.     if AMask[mIndex] then Begin
  72.       //instalujeme modul, zobrazime to na stavovem radku
  73.       SetStatusBarMessage(
  74.         'Instaluje se...' + ExtractFileName(AModuleList[mIndex])
  75.       );
  76.       //zdrojovy a cilovy soubor
  77.       mSrc := AModuleList[mIndex];
  78.       mDest := GetPluginsDirectory + ExtractFileName(mSrc);
  79.  
  80.       //soubor nesmi existovat, jinak je uz nacten
  81.       if not (FileExists(mDest)) then Begin
  82.         //zkopirovat modul do slozky /Plugins
  83.         if CopyFile(mSrc, mDest, true) then Begin
  84.           inc(result);
  85.           if not (DeleteFile(mSrc)) then ShowMessage('DoÜlo k chyb∞ p°i ' +
  86.             'odstra≥ovßnφ souboru ale modul byl nainstalovßn. Tento soubor ' +
  87.             'ji₧ nenφ nutn² a m∙₧e b²t odstran∞n:'#13#10 + mSrc);
  88.         end else
  89.           ShowMessage('DoÜlo k chyb∞ p°i kopφrovßnφ souboru. Modul nemohl ' +
  90.             'nainstalovßn.'#13#10#13#10'Zdrojov² soubor:'#13#10 + mSrc +
  91.             #13#10#13#10'Cφlov² soubor:'#13#10 + mDest);
  92.       end else
  93.         ShowMessage('Modul ' + ExtractFileName(mSrc) + ' je ji₧ nainstalovßn ' +
  94.           'a nem∙₧e b²t aktualizovßn p°i spuÜt∞nΘm programu Programme''s ' +
  95.           'Wizard 2. UkonΦete program a modul doinstalujte ruΦn∞.');
  96.     end; //if AMask[mIndex] then ...
  97. end;
  98.  
  99. {procedure Main;}
  100. var
  101.   mDir: String;
  102.   mModuleList: Array of String;
  103.   mCheckBoxes: Array of boolean;
  104. Begin
  105.   if GetValidVerStr <> GetVerStr then //nespravna verze?
  106.     ShowMessage('Upozorn∞nφ: tento skript byl napsßn pro Programmers Wizard ' +
  107.       GetValidVerStr + '. Momentßln∞ spuÜt∞nß verze: ' + GetVerStr);
  108.   
  109.   //tento skript pouziva chranene funkce, nebude pracovat pri zapnutem
  110.   //bezpecnem skriptovani
  111.   EnsureSafeScriptingDisabled;
  112.  
  113.   //vybrat slozku s novymi moduly
  114.   ShowMessage('Vyberte slo₧ku, ve kterΘ jsou umφst∞ny novΘ moduly.');
  115.   if not (SelectDirectory('Slo₧ka s nov²mi moduly:', mDir)) then Halt;
  116.  
  117.   //nesmime instalovat ze slozky, ktera uz obsahuje nainstalovane moduly
  118.   if LowerCase(mDir) = LowerCase(GetPluginsDirectory) then Begin
  119.     ShowMessage('Nelze instalovat ze slo₧ky, kterß u₧ obsahuje nainstalovanΘ ' +
  120.       'moduly.');
  121.     Halt;
  122.   end;
  123.  
  124.   //vytvorit a zobrazit jejich seznam
  125.   SelectFiles(mDir, 'ZßsuvnΘ moduly (*.dll)|*.dll', mModuleList);
  126.   SetArrayLength(mCheckBoxes, GetArrayLength(mModuleList));
  127.   if not (ParseAndDisplayCheckListDialog(mModuleList, mCheckBoxes)) then Halt;
  128.  
  129.   //dame uzivateli vedet co vlastne dela, treba jen zkousi skript, nemusi
  130.   //instalovat nesmyslne knihovny, ze.
  131.   if SumBooleanArray(mCheckBoxes) = 0 then Begin
  132.     ShowMessage('Nebyl vybrßn ₧ßdn² modul.');
  133.     Halt;
  134.   end;
  135.  
  136.   if not (AskUser('Tento skript nynφ nainstaluje ' + IntToStr(SumBooleanArray(
  137.     mCheckBoxes)) + ' vybran²ch modul∙. Chcete pokraΦovat?')) then Halt;
  138.  
  139.   //nainstalujeme vsechny vybrane moduly
  140.   ShowMessage(IntToStr(InstallPlugins(mModuleList, mCheckBoxes)) + ' modul∙ ' +
  141.     '(z ' + IntToStr(SumBooleanArray(mCheckBox)) + ' celkem) bylo ·sp∞Ün∞ ' +
  142.     'nainstalovßno. Nynφ m∙₧ete restartovat program Programmer''s Wizard 2'.');
  143. end.
  144.  
  145.